iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0
DevOps

建立應用程式 UI 自動化測試 - 以 Robot Framework 為例系列 第 27

[27] Robot Framework 結合 Appium 進行 App 自動化測試 - 提高測試穩定

  • 分享至 

  • xImage
  •  

在自動化測試開發中,Flaky Test 一直是讓人頭痛的問題,明明沒有改測試腳本,開發也沒有部署新的版本,但是測試有時候通過、有時候失敗,或是在我的電腦跑成功,怎麼上雲之後有時候成功有時候失敗,這種惱人的問題相信開發自動化的夥伴的肯定都有切身之痛,無法追到的原因只可以甩鍋給網路問題,然而 Flaky Test 導致的測試結果不穩定因此難以識別真實的軟體問題,進而影響整個開發流程,在本章節中,我們將會介紹該如何透過 Appium 的 Wait 關鍵字來提高我們測試的穩定度。

什麼是 Flaky Test?

Flaky Test 指的是,在相同的條件或是相同的程式碼下,執行測試時有時候會 pass 有時候會 fail 的測試結果不穩定,這使得測試人員需要花時間查看測試原因或是重新執行測試,頻繁的誤報也容易導致開發團隊對於自動化的測試不信任,讓測試的效益大打折扣。

Flaky Test 的常見原因

Flaky Test 的成因多種多樣,但常見的原因通常與以下幾點有關:

  1. 不穩定的測試環境:測試環境中的資源競爭、網路不穩定或環境設定不一致,可能會導致測試結果不一致。
  2. 異步操作:現代應用程式中經常出現異步操作,特別是在移動應用中。若測試腳本未能正確處理這些操作,可能會導致測試失敗。
  3. 不穩定的 UI 元件:UI 元件的加載時間可能不一致,特別是在移動測試中,元件的存在與否可能取決於多種因素,如網路延遲、裝置效能等。
  4. 第三方依賴:使用第三方服務或 API 進行測試時,如果這些依賴本身不穩定,也會導致測試結果不一致。

如何減少 Flaky Test

我們可以透過些手段來減少 Flaky Test:

  • 設定測試重試:有時候測試失敗的原因可能來自於當下的網路環境或是其他不可控因素,因此設定測試重試能夠有效的防止測試不穩定導致 CI 流程被卡住的問題,不過這個需要特別注意的是,我們應該要關注重試測試的相關數據,避免發生其實是 bug 但是因為重試後都會通過因此我們判定測試通過的情況發生
  • 調整等待時間:在 UI 測試上,往往會因為頁面的載入尚未完成導致測試的失敗,這時候我們可以透過增加測試的時間或是等到元件出現才做點擊的方式來提升測試的穩定性,這邊也需要特別關注測試的數據,像是當今天我們一再的將測試等待時間延長,需要深入分析真的是因為測試不穩定呢?還是產品的性能變差載入時間更久了

使用 AppiumLibrary 的 wait 關鍵字提高測試穩定度

在上面我們提到了不穩定的 UI 元件這個因素,這個部分是我們相對容易掌控的,使用適當的等待機制是提高測試穩定度的重要方法之一,有時候是因為 UI 載入比較慢,或是網路比較慢導致我們在執行下一個步驟的時候 UI 還沒有渲染完成,因此造成點不到元件的情況發生,這時候我們可以透過 AppiumLibrary 提供的 wait 的 keyword 來進行等待,當頁面上出現指定元件時才進行下一步,如此一來可以大大提升測試的穩定性。

這時候大家可能會想說,在前面的 Playwright 我們沒有提到這個概念呀,而且 Web 測試明明跑更快,應該很常發生腳本比瀏覽器快的問題呀!沒錯,確實是這樣,之所以不需要等待的原因是因為 Playwright 的內建自動等待機制,Playwright 提供以下兩種等待機制,替我們提升了測試的穩定性。

  • 元件等待:在 Playwright 中,當你執行與元件相關的操作(如 click, type, fill 等)時,Playwright 會自動等待目標元件變得可見、可操作並且沒有被遮擋。這意味著,如果元件在頁面上尚未加載完畢,Playwright 會自動等待,直到可以對該元件進行操作。
  • 網路等待:Playwright 會自動等待網路請求的完成。例如,當你導航到一個新頁面或者觸發一個網路請求,Playwright 會自動等待頁面加載完成或網路請求返回結果,這樣可以確保後續操作基於正確的頁面狀態。

為了應對 Flaky Test,AppiumLibrary 雖然不像 Playwright 直接內建了等待的功能,但是提供了多種 wait 關鍵字,可以幫助我們客製化更靈活的處理測試中的異步操作和不穩定因素。

以下是一些常用的 wait 關鍵字及其應用場景:

Wait Until Element Is Visible

等待某個元件在畫面上可見:這個關鍵字會在指定時間內不斷檢查目標元件是否可見,若在指定時間內元件未出現,測試將失敗。

Wait Until Element Is Visible    //button[@text='Submit']    10s

Wait Until Page Contains

等待整個頁面包含指定的文字:此關鍵字用於確保頁面上的特定文字已加載,特別適合處理頁面加載時間不穩定的情況。

Wait Until Page Contains    Login Successful    10s

Wait Until Element Is Enabled

等待某個元件可操作(即元件被啟用):該關鍵字適用於等待某個按鈕或輸入框變為可用狀態,避免因為過早操作而導致的測試失敗。

Wait Until Element Is Enabled    id=submitButton    5s

Wait Until Page Does Not Contain Element

等待某個元件從頁面上消失,適合用來等待加載動畫或其他暫時性元件的消失,以確保頁面已完全加載,例如:點擊除存後會出現儲存中轉圈圈的畫面,我們可以等到圈圈轉完才進行下一個步驟。

Wait Until Page Does Not Contain Element    //div[@id='loading']    10s

進階技巧:結合條件等待

假設今天有個情境是,當今天五秒內畫面出現優惠卷的話,我們就點擊優惠卷,如果沒有則不點擊這樣的情境下,我們便可以透過下方的 Code 來執行,透過當前畫面元件的顯示狀態來決定下一個步驟的執行與否:

${is_visible}=    Run Keyword And Return Status    Wait Until Element Is Visible    //button[@text='ticket']    5s
Run Keyword If    '${is_visible}'=='True'    Click Button    //button[@text='get']

結語

Flaky Test 是測試自動化過程中的一大挑戰,但通過了解其成因並採取相應的策略,我們可以大幅提高測試的穩定性。使用 AppiumLibrary 的 wait 關鍵字是一個行之有效的方法,能幫助我們應對不穩定的測試場景,從而確保測試結果的可靠性。


上一篇
[26] Robot Framework 結合 Appium 進行 App 自動化測試 - Android/iOS 測試實際開發
下一篇
[28] Robot Framework 結合 Appium 進行 App 自動化測試 - 整合 BrowserStack (雲端設備測試服務平台)
系列文
建立應用程式 UI 自動化測試 - 以 Robot Framework 為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言